/**
 * @Author yinyunqi
 * @date 2018年1月30日
 * @Content 
 */
package com.yongqi.pub;

import java.util.Properties;
import java.util.ResourceBundle;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;


public class EmailHelper {
    
    //从mail.properties配置文件中获取
    private static final ResourceBundle bundle = ResourceBundle.getBundle("mail");
    private static final String sendFrom = bundle.getString("email.from");
    private static final String username = bundle.getString("username");
    private static final String password = bundle.getString("password");
    private static final String host = bundle.getString("email.host");
    
    public static void sendEmail(String someone,String subject,String content) {
	System.out.println(sendFrom+"-"+username+"-"+password+"-"+host);
	Properties props = new Properties();
	
	props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议（JavaMail规范要求）
	props.setProperty("mail.smtp.host", "smtp.163.com");   // 发件人的邮箱的 SMTP 服务器地址
	props.setProperty("mail.smtp.auth", "true");
	
	// PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
        //     如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
        //     打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。
        // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
        //                  需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
        //                  QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
//        final String smtpPort = "465";
//        props.setProperty("mail.smtp.port", smtpPort);
//        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
//        props.setProperty("mail.smtp.socketFactory.fallback", "false");
//        props.setProperty("mail.smtp.socketFactory.port", smtpPort);
        
	Authenticator authenticator = new Authenticator() {
	    @Override
	    public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(username, password);
	    }
	};
	
	Session session = Session.getInstance(props,authenticator);
	session.setDebug(true);
	Message message = new MimeMessage(session);
	try {
	    message.setFrom(new InternetAddress(sendFrom));
	    message.setRecipients(RecipientType.TO, InternetAddress.parse(someone));
	    try {
		message.setSubject(subject);
		message.setContent(content, "text/html;charset=UTF-8");
		Transport.send(message);
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}catch (AddressException e) {
	    e.printStackTrace();
	}catch (MessagingException e) {
	    e.printStackTrace();
	}
    }
}

